//
//  OAuthViewController.swift
//  HMWeibo08
//
//  Created by 唐万超 on 15/7/30.
//  Copyright © 2015年 唐万超. All rights reserved.
//

import UIKit
import SVProgressHUD

class OAuthViewController: UIViewController,UIWebViewDelegate {

    /// 懒加载webView
    private lazy var webView = UIWebView()
    
    /// 重写loadView来改变当前视图控制器
    override func loadView() {
        
        view = webView
        
        // 设置代理
        webView.delegate = self
        
        title = "新浪微博"
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "关闭", style: UIBarButtonItemStyle.Plain, target: self, action: "closeView")
        
    }
    
    func closeView() {
        
        // 在关闭时取消小转轮
        SVProgressHUD.dismiss()
    
        dismissViewControllerAnimated(true, completion: nil)
        
    }
    
    // MARK: - webView代理方法
    /// 开始加载webView
    func webViewDidStartLoad(webView: UIWebView) {
        print("开始")
        SVProgressHUD.show()
    }
    /// 完成加载webView
    func webViewDidFinishLoad(webView: UIWebView) {
        print("结束")
        SVProgressHUD.dismiss()
    }
    /// webView重定向的时候，view改变的时候调用  返回true正常工作，返回false什么都不加载
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
       // print(request.URL?.query)  URL的参数
        let urlString = request.URL!.absoluteString
        print(urlString)
        
        // 当不包含重定向地址则继续执行
        if !urlString.hasPrefix(NetworkTools.sharedNetworkTools.redirectUri)
        {
            return true
        }
        
        // 当包含重定向地址，则需要判断参数
        print("判断参数")
        print(request.URL?.query)
        if let query = request.URL?.query where query.hasPrefix("code=")
        {
            print("截取授权码")
           let code = query.substringFromIndex(advance(query.startIndex, "code=".characters.count))
            
            print(code)
            // TODO: 拿到授权码后需要获取Token
            
            loadAccessToken(code)
            
        }else{
        
            closeView()
        
        }
        
        //print(request)
        return false
    }
    
    
    // 获取token
    private func loadAccessToken (code: String) {
    
        NetworkTools.sharedNetworkTools.loadAccessToken(code) { (result, error) -> () in
            // 进行错误判断
            if error != nil || result == nil {
            
                self.netError()
                
                return
            }
//            
//            // 此处得到返回值，将返回值存入模型中
//             // ----将得到的授权码通过post请求访问新浪服务器，得到返回值（其中包含token），将返回值存入模型中
//            // print(result)   此处的result已经被转换为字典
//            
//            
//            print("\(result)----------------")
//            
//            // 进行字典转模型
//            let account = UserAccount(dict: result!)
//            
//            // 此处得到用户的账号信息进行归档
//            account.saveAccount()
//            
//            // TODO: 用户登录成功后，加载当前用户的个人信息
//            NetworkTools.sharedNetworkTools.loadUserInfo(account.uid!, finished: { (result, error) -> () in
//                print(result)
//            })
//            
//            print (account)
            
            
            // 字典转模型
            // 1. 用 token 获取的信息创建用户账户模型
            // 2. 异步加载用户信息
            // 3. 保存用户信息(模型中完成)
            UserAccount(dict: result!).loadUserInfo({ (error) -> () in
                if error != nil {
                    self.netError()
                    return
                }
                
                print("OK")
                
                // 当登录成功进行页面跳转，发送通知
                /// 跳转到欢迎页面
                NSNotificationCenter.defaultCenter().postNotificationName(HMRootViewSwitchNotification, object: false)
                
                
                // modal 出来的控制器，在切换跟控制器之前一定要dismiss掉，不然不会被销毁
                self.closeView()
                
            })

            
        }
        
    }
    
    
    deinit {
    
        print("modal出来的授权控制器销毁了")
    
    }
    
    
    /// 网络出错的处理
    private func netError() {
    
        
        SVProgressHUD.showInfoWithStatus("亲，您的网络不给力，换4G吧")
        
        // 显示后延迟关闭
        
        let when = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * NSEC_PER_SEC))
        
        // 改为尾随闭包
        dispatch_after(when, dispatch_get_main_queue()) { () -> Void in
            
            self.closeView()
            
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()

        webView.loadRequest(NSURLRequest(URL: NetworkTools.sharedNetworkTools.oauthUrl()))
    }

  
    

  

}
